import { LayerTypes } from "../enums";
import { LayerOptions, FeaturePropertyType, GeoserverLayerStyleOptions, ExtentOptions } from "../models/layer.model";
import { StyleOptions } from "./style.class";

export abstract class Layer {
    // 图层ID
    id: string;
    // 图层名称
    title: string;
    // 图层类型
    type: LayerTypes;
    // 图层配置
    options: LayerOptions;
    // geojson
    geojson?: string;
    // 数据别名设置
    alias?: { [key: string]: string };
    // 是否可以在地图上显示
    mapViewable?: boolean;
    // 是否可以在表格中显示
    tableViewable?: boolean;
    // 图层是否可以点击选择要素
    selectable?: boolean;
    // 是否显示在地图上
    visiable?: boolean;
    // 图层禁用
    disabled?: boolean;
    // 图层叠放顺序
    zIndex?: number;
    // 图层透明度
    opacity?: number;
    // 表格显示的列
    tableColumn?: string[];
    // 图层范围 - An array of numbers representing an extent: [minx, miny, maxx, maxy].
    extentOptions?: ExtentOptions;

    // 数据ID字段（除WFS数据外）
    idFieldName?: string = 'id';

    /**
     * layer styles
     * geoserver and custom
     */
    style?: StyleOptions;
    styleActive?: StyleOptions;
    geoserverStyle?: GeoserverLayerStyleOptions;
    geoserverStyleActive?: GeoserverLayerStyleOptions;
    
    /**
     * 数据过滤配置
     */
    // 是否支持数据过滤
    queryable?: boolean;

    // 是否有查询结果
    queryResult?: { [key: string]: any }[];


    // 是否显示在表格中
    visiableTable?: boolean;
    // 图层状态是正在加载中
    loading?: boolean;
    // 图层状态是已加载
    loaded?: boolean;
    // 图层加载失败
    loadError?: any;


    // 图层要素属性
    data?: { [key: string]: any }[];

    // 默认在图层控制列表里显示
    default?: boolean;

    // 图层要素属性字段类型
    fieldTypes?: FeaturePropertyType[];

    // 是否有图片
    photoExist?: boolean;
    
    zoomTo?: boolean;
}